From 495989297b6d42e86f61f590fc87ff68461c9b56 Mon Sep 17 00:00:00 2001 From: Christian Limpach Date: Mon, 29 Jan 2007 22:43:51 +0000 Subject: [PATCH] [linux] Delay making the VCPUOP_initialise calls until the cpu is brought up the first time. Signed-off-by: Christian Limpach --- linux-2.6-xen-sparse/drivers/xen/core/smpboot.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c b/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c index f58b6dca2d..dea4b22923 100644 --- a/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c +++ b/linux-2.6-xen-sparse/drivers/xen/core/smpboot.c @@ -48,6 +48,7 @@ cpumask_t cpu_online_map; EXPORT_SYMBOL(cpu_online_map); cpumask_t cpu_possible_map; EXPORT_SYMBOL(cpu_possible_map); +static cpumask_t cpu_initialized_map; struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned; EXPORT_SYMBOL(cpu_data); @@ -278,6 +279,8 @@ void __init smp_prepare_cpus(unsigned int max_cpus) if (xen_smp_intr_init(0)) BUG(); + cpu_initialized_map = cpumask_of_cpu(0); + /* Restrict the possible_map according to max_cpus. */ while ((num_possible_cpus() > 1) && (num_possible_cpus() > max_cpus)) { for (cpu = NR_CPUS-1; !cpu_isset(cpu, cpu_possible_map); cpu--) @@ -330,8 +333,6 @@ void __init smp_prepare_cpus(unsigned int max_cpus) #else cpu_set(cpu, cpu_present_map); #endif - - cpu_initialize_context(cpu); } init_xenbus_allowed_cpumask(); @@ -418,6 +419,11 @@ int __devinit __cpu_up(unsigned int cpu) if (rc) return rc; + if (!cpu_isset(cpu, cpu_initialized_map)) { + cpu_set(cpu, cpu_initialized_map); + cpu_initialize_context(cpu); + } + if (num_online_cpus() == 1) alternatives_smp_switch(1); -- 2.30.2